'''
有难度
'''
'''
n, k = map(int, input().split())
lst = list(map(int, input().split()))
red = lambda x: x - 1
i = 0
c = 0
while True:
    r = i + k
    if r <= n:
        if 0 not in lst[i:r]:
            lst[i: r] = map(red, lst[i:r])
            c += 1
        else:
            i = lst[i: r].index(0) + i + 1
    else:
        break
c += sum(lst)
print(c)
'''


# 方法二
# 试题 J: 最优清零方案
n, k = map(int, input().split())
a = list(map(int, input().split()))
i, c = 0, 0
while True:
    r = i + k
    if r <= n:
        if 0 not in a[i:r]:
            a[i:r] = map(lambda x: x - 1, a[i:r])
            #对一个列表进行切片，并应用一个lambda函数来修改切片的值。具体来说：
            # a[i:r]: 这是一个切片操作，它从列表a中提取从索引i到r-1的元素。
            # =后边的，这里使用了map函数，它对列表a[i:r]中的每个元素应用一个函数。
            # 具体来说，它应用了一个lambda函数，该函数将每个元素x减去1。
# a[i:r] = ...: 这部分代码将上述map函数的结果（也是一个列表）赋值回原来的切片位置，即更新a从索引i到r-1的元素。
            # 综上所述，这行代码的作用是将列表a中从索引i到r-1的每个元素减1。
            c += 1
        else:
            i = a[i:r].index(0) + i + 1
            # 对一个切片进行操作，并查找特定元素（这里是0）在切片中的索引。
            #
            # a[i:r]: 这是一个切片操作，它从列表a中提取从索引i到r-1的元素。
            # .index(0): 这会查找切片中第一个出现的0的索引。
            # + i + 1: 这将找到的索引值增加i和1，以便返回原始列表a中0的准确索引位置。
            # 综上所述，这行代码的作用是找到列表a中从索引i到r-1的范围内第一个0的索引，并返回这个索引在原始列表a中的位置。注意，如果0不存在于该范围内，这行代码会引发一个ValueError。
    else:
        break
c += sum(a)
print(c)

'''
input:
4 2
1 2 3 4
print:
6
'''



import os
import sys

# 请在此输入您的代码
n,k=map(int, input().split())
a=list(map(int, input().split()))
i,c=0,0
while True:
    r=i+k
    if r<=n:
        if 0 not in a[i:r]:
            a[i:r]=map(lambda x: x-1, a[i:r])
            c+=1
        else:
            i=a[i:r].index(0)+i+1
    else:
        break
c+=sum(a)
print(c)
